package com.yztctech.a14_01_customprovider;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

/**
 * ContentProvider 内容提供者
 * 一、ConentProvider是什么？;可以跨app传输数据,也可以使用aidl,文件访问等
 *    是Android提供的一种在不同应用程序(进程)间实现数据共享（交互）的方式
 *    是Android四大组件之一，使用前必须在清单文件注册
 *
 * 二、Android中数据存储的方式？;Android的四大组件,五大存储,六大布局
 *    1、SharedPreferences
 *    2、File存储：内部存储和外部存储
 *    3、SQLite数据库
 *    4、网络存储
 *    5、ContentProvider，实际上是数据传输的机制，本身没有存储功能
 *
 * 三、ContentProvider和ContentResolver的运行机制
 *    ContentProvider提供数据
 *    ContentResolver下达命令操作数据
 *    通过Uri进行数据指令
 *
 *  四、Uri(Uniform Resource Identifier) 统一资源标识符
 *  1、规则
 *      content：//权威+路径+ID
 *  2、UriMatcher
 *      构造方法  ：参数，如果匹配不成功的匹配码
 *      添加匹配规则 addUri（authority，path，code）
 *      匹配： int match（Uri）
 *
 *  五、自定义ContentProvider的实现步骤
 1、编写一个类CustomProvider，必须继承自ContentProvider类。
 2、定义ContentProvider的Uri。这个Uri是ContentResolver对象执行CRUD操作时重要的参数。
 其实就是定义Uri的authority和path
 3、使用UriMatcher定义匹配规则。
 4、实现ContentProvider类中所有的抽象方法：
 onCreate() 、getType() 、query() 、insert() 、update()、delete() 方法。
 ContentProvider暴露出来的数据和方法并不是给自身调用的，而是给其他应用程序来调用。
 5、在AndroidMainfest.xml文件中使用<provider>标签注册ContentProvider。

 * 备注:
 * 1. ContentProvider 屏蔽了数据存储的细节,内部实现对用户完全透明,用户只需要关心操作数据的 uri 就可以了， ContentProvider 可以实现不同 app 之间共享。
 * 2. Sql 也有增删改查的方法，但是 sql 只能查询本应用下的数据库。而 ContentProvider 还可以去增删改查本地文件. xml 文件的读取等。
 * 3. 其实contentProvider因为跨app的原因到时使用的不多呢,至少我是这么认为,需求不多
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
